﻿// INGENIOUS FRAMEWORK - Semantic Web Development Simplified
// Copyright (C) 2012 Linked Data Tools

// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using MongoDB.Driver;
using Ingenious.GraphStore;

namespace Ingenious.Core
{
    /// <summary>
    /// Connection definition for a MongoDB based graph store
    /// </summary>
    public class MongoGraphStoreConnectionInfo : GraphStoreConnectionInfoBase
    {
        #region Constants
        public const string GraphListDatabaseName = "GraphListDatabase";
        #endregion

        private readonly string m_connectionString;
        private readonly MongoServerSettings m_mongoServerSettings;
        private readonly string m_graphListDatabaseName;
        
        #region Object Lifetime
        public MongoGraphStoreConnectionInfo(string connectionString, MongoServerSettings mongoServerSettings)
        {
            if (string.IsNullOrEmpty(connectionString))
            {
                throw new ArgumentNullException("connectionString cannot be null or empty", "connectionString");
            }

            if (mongoServerSettings == null)
            {
                throw new ArgumentNullException("mongoServerSettings");
            }

            m_connectionString = connectionString;
            m_mongoServerSettings = mongoServerSettings;
        }
        #endregion

        #region Properties
        public string ConnectionString
        {
            get { return m_connectionString; }
        }

        public MongoServerSettings MongoServerSettings
        {
            get { return m_mongoServerSettings; }
        }

        public override Type GraphStoreType
        {
            get { return typeof(MongoGraphStore); }
        }
        #endregion
    }
}
